package com.jic.market.service.mutex;

import com.jic.market.entity.mutex.MutexModel;
import com.jic.market.entity.mutex.MutexResultContext;

import java.util.List;

/**
 * description: MutexService
 * date: 2020/5/11 11:01
 * author: wangys
 * version: 1.0
 */
public interface MutexService {
    /**
     * 是否互斥，2个活动
     * @param sourceType
     * @param targetType
     * @return
     */
    Boolean checkMutex(Integer sourceType, Integer targetType);


    /**
     * 计算互斥
     * 出参互斥商品列表、生效商品列表 mutexList && noMutexList
     * 互斥商品列表需返回每个互斥商品的互斥活动列表  mutexPromotionProducts
     * @param mutexModel
     * @return
     */
    MutexResultContext doProcessMutex(MutexModel mutexModel);

    /**
     * 计算互斥
     * 出参互斥商品列表、生效商品列表 mutexList && noMutexList
     * 互斥商品列表需返回每个互斥商品的互斥活动列表  mutexPromotionProducts
     * @param promotionId
     * @param productIds
     * @return
     */
    MutexResultContext doProcessMutex(Long promotionId, List<Long> productIds);

    /**
     * 计算互斥
     * 出参互斥商品列表、生效商品列表 mutexList && noMutexList
     * 互斥商品列表需返回每个互斥商品的互斥活动列表  mutexPromotionProducts
     * @param promotionId
     * @param productIds
     * @return
     */
    public MutexResultContext doProcessMutexByPatch(Long promotionId, List<Long> productIds);

    /**
     * 计算互斥-支付立减活动
     * 根据支付方式计算互斥 有重复支付方式则互斥
     * 出参互斥商品列表、生效商品列表 mutexList && noMutexList
     * 互斥商品列表需返回每个互斥商品的互斥活动列表  mutexPromotionProducts
     * @param mutexModel
     * @return
     */
    MutexResultContext doProcessMutexByPayment(MutexModel mutexModel);

}
